
#include "VidaExtra.h"
#include <iostream>
#include <algorithm>

const vector<int> EstadoVidaExtra::acciones = make_vector<int>() << EstadoBasico::Movimiento;
const vector<string> EstadoVidaExtra::descripcionAcciones = make_vector<string>() << "mover";

VidaExtra::VidaExtra(int x, int y, int maximoX, int maximoY, Orientacion orientacion) : ObjetoMovible(x, y, maximoX, maximoY, orientacion) {

	if (orientacion == Derecha)
		estadoDerecha = Empezo;
	else // if (orientacion == Izquierda)
		estadoIzquierda = Empezo;
		
	estado = EstadoBasico::Movimiento;
	prioridad = 5;
	tipo = BONUS;
}

void VidaExtra::Actualizar(Uint32 time) {
	
	if (estadoDerecha == Moviendo) {
		MoverDerecha(maximoX, time - lastTimeActualizar);
		if (getPosicion().getX() > maximoX) {
			setEstadoVida(Muerto);
		}
	}
	
	if (estadoIzquierda == Moviendo) {
		MoverIzquierda(time - lastTimeActualizar);
		if (getPosicion().getX() + ancho < 0){
			setEstadoVida(Muerto);
		}
	}
	
	if (estadoDerecha == Empezo) {
		estadoDerecha = Moviendo;
		setEstado(EstadoBasico::Movimiento);
	}
	
	if (estadoIzquierda == Empezo) {
		estadoIzquierda = Moviendo;
		setEstado(EstadoBasico::Movimiento);
	}
}

int VidaExtra::indexEstado(int estado) {
	
	vector<int> estados = EstadoVidaExtra::acciones;
	
	unsigned int posicion = find(estados.begin(), estados.end(), estado) - estados.begin();
	
	if (posicion >= estados.size())
		return -1;
		
	return posicion;
}

void VidaExtra::Morir() {
	setEstadoVida(Muerto);
}

void VidaExtra::ColisionarConPersonaje(ObjetoEstatico* personaje, int colX, int colY, int colXvieja, int colYvieja) {

	if (getEstadoVida() == Muerto) return;
	static_cast<Personaje*> (personaje)->aumentarVida();
	setEstadoVida(Muerto);
}

void VidaExtra::ColisionarConEnemigo(ObjetoEstatico* movible, int colX, int colY, int colXvieja, int colYvieja) {

}
